home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib18.dsk / SPEED MAZE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  160 lines

  1. 1  REM   ********2.7.85********
  2. 2  REM   *     SPEED MAZE     *
  3. 3  REM   * BY DAVID KRATHWOHL *
  4. 4  REM   * COPYRIGHT (C) 1984 *
  5. 5  REM   * BY MICROSPARC, INC *
  6. 6  REM   * LINCOLN, MA. 01773 *
  7. 7  REM   **********************
  8. 40  TEXT : HOME : GOSUB 610: REM   TITLE AND SET UP
  9. 50  TEXT : HOME : GOSUB 830: REM  SET VELOCITY
  10. 60  GOSUB 930: REM  DRAW BOARD
  11. 70  REM  *   RUN THE MAZE   *
  12. 80  COLOR= 13: PLOT X,Y: PLOT XG,YG
  13. 90  POKE  -16368,0
  14. 100  HOME : VTAB 22: HTAB 15: INVERSE : PRINT " SPEED: ";V1;" ": NORMAL : VTAB 24: PRINT "PRESS A KEY (A,Z,<-,->) TO START";
  15. 110 BE =  PEEK( -16384): IF BE <127  OR (BE < >193  AND BE < >218  AND BE < >136  AND BE < >149)  THEN 110
  16. 120 BE =  PEEK( -16384): FOR J = 1 TO VE: NEXT J
  17. 130  IF BE <127  OR (BE < >193  AND BE < >218  AND BE < >136  AND BE < >149)  THEN BE = LA
  18. 140  IF BE = 193  THEN Y = Y -1: REM   UP 
  19. 150  IF BE = 218  THEN Y = Y +1: REM  DOWN
  20. 160  IF BE = 136  THEN X = X -1: REM   LEFT
  21. 170  IF BE = 149  THEN X = X +1: REM  RIGHT
  22. 180 LA = BE
  23. 190  IF X = XG  AND Y = YG  THEN  GOSUB 430: GOTO 250: REM   WIN 
  24. 200  IF  SCRN( X,Y) < >0  THEN  GOSUB 530: GOTO 250: REM  LOSE
  25. 210  PLOT X,Y
  26. 220  FOR J = 1 TO 3:SO =  PEEK(S): NEXT J
  27. 230  GOTO 120
  28. 240  REM  * CONTINUE OPTIONS *
  29. 250  HOME 
  30. 260  VTAB 21: HTAB 3: PRINT "CHOOSE ONE:  <1> SAME MAZE/SAME SPEED"
  31. 270  VTAB 22: HTAB 16: PRINT "<2> SAME MAZE/NEW SPEED"
  32. 280  VTAB 23: HTAB 16: PRINT "<3> NEW MAZE AND SPEED"
  33. 290  VTAB 24: HTAB 16: PRINT "<4> QUIT";
  34. 300  VTAB 21: HTAB 14: GET K$:K =  VAL(K$): IF K <1  OR K >4  THEN 300
  35. 310  ON K GOTO 330,350,390,410
  36. 320  REM  * SAME MAZE & SPEED *
  37. 330 X = 4:Y = 36:XG = 36:YG = 4: GOSUB 1460: GOSUB 1510: GOTO 80
  38. 340  REM  * SAME MAZE/NEW SPEED *
  39. 350 X = 4:Y = 36:XG = 36:YG = 4
  40. 360  TEXT : HOME 
  41. 370  GOSUB 830: GOSUB 1460: GOSUB 1510: GOTO 80
  42. 380  REM  * NEW MAZE AND SPEED *
  43. 390  CLEAR :X = 4:Y = 36:XG = 36:YG = 4: DIM M(150): DIM F(150):S =  -16336: GOTO 50
  44. 400  REM  * QUIT *
  45. 410  TEXT : HOME : END 
  46. 420  REM  *  WINNER  *
  47. 430  HOME : HTAB 3
  48. 440  VTAB 22: FLASH : PRINT "*****        YOU WIN !!!!       *****"
  49. 450  FOR J = 1 TO 10
  50. 460  FOR K = 1 TO 20:SO =  PEEK(S): NEXT K
  51. 470  FOR K = 1 TO 5:SO =  PEEK(S): NEXT K
  52. 480  NEXT J
  53. 490  FOR K = 1 TO 1000: NEXT K: NORMAL 
  54. 500  POKE  -16368,0
  55. 510  RETURN 
  56. 520  REM   *   LOSER   *
  57. 530  HOME : HTAB 3
  58. 540  VTAB 22: FLASH : PRINT "*****        YOU LOSE !!!!      *****"
  59. 550  FOR K = 1 TO 45:SO =  PEEK(S): NEXT K
  60. 560  FOR K = 1 TO 30: FOR J = 1 TO 5:SO =  PEEK(S): NEXT J: NEXT K
  61. 570  FOR J = 1 TO 1000: NEXT J: NORMAL 
  62. 580  POKE  -16368,0
  63. 590  RETURN 
  64. 600  REM  * TITLE & SET UP *
  65. 610 X = 4:Y = 36:XG = 36:YG = 4: DIM M(150): DIM F(150)
  66. 620 S =  -16336
  67. 630  HOME : VTAB 5: HTAB 10
  68. 640  INVERSE : VTAB 6: HTAB 13: PRINT "                  "
  69. 650  HTAB 13: PRINT "    SPEED MAZE    "
  70. 660  HTAB 13: PRINT "                  "
  71. 670  NORMAL : VTAB 22: PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **"
  72. 680  VTAB 20: HTAB 8: PRINT "DO YOU WANT INSTRUCTIONS?";: GET K$
  73. 690  IF K$ < >"Y"  THEN  RETURN 
  74. 700  GOTO 720
  75. 710  REM  * INSTRUCTIONS *
  76. 720  HOME 
  77. 730  VTAB 1: PRINT "THE OBJECT OF SPEED MAZE IS TO THREAD   YOUR WAY THROUGH THE MAZE FROM YOUR     STARTING POSITION (THE MARKER ON THE"
  78. 740  PRINT "LEFT) TO THE GOAL (THE MARKER ON THE    RIGHT).  YOU MUST NOT HIT ANY OF THE    WALLS OR YOUR OWN TRAIL BY BACKING UP.  YOUR DIRECTION IS CONTROLLED BY THE     FOLLOWING FOUR KEYS:"
  79. 750  PRINT : PRINT : PRINT "              A    UP"
  80. 760  PRINT : PRINT "              Z    DOWN"
  81. 770  PRINT : PRINT "              <-   LEFT"
  82. 780  PRINT : PRINT "              ->   RIGHT"
  83. 790  PRINT : PRINT 
  84. 800  PRINT : PRINT "WHEN YOU ARE READY TO SET YOUR SPEED,"
  85. 810  GOSUB 880
  86. 820  RETURN 
  87. 830  REM  SET VELOCITY
  88. 840  HOME : VTAB 12: HTAB 4: INPUT "HOW FAST WILL YOU TRAVEL?               (THE RANGE IS 1 (SLOW) TO 10 (FAST)     ";V$:V1 =  VAL(V$)
  89. 850  IF V1 <1  OR V1 >10  THEN 840
  90. 860 VE = 205 -(V1 *20)
  91. 870  RETURN 
  92. 880  REM   CONTINUE SEQUENCE
  93. 890  VTAB 22: PRINT "      PRESS ANY KEY TO CONTINUE       "
  94. 900 K =  PEEK( -16384): IF K <127  THEN 900
  95. 910  POKE  -16368,0: RETURN 
  96. 920  REM  * DRAW BOARD *
  97. 930  GOSUB 1460: REM  DRAW GRID
  98. 940  GOSUB 1410: REM  INITIALIZE M() ARRAY
  99. 950  GOSUB 1340: REM   CHOOSE FIRST CELL
  100. 960  GOSUB 1010: REM   ADD ADJ. TO FRONTIER
  101. 990  GOTO 960
  102. 1000  REM  * ADD ADJ. TO FRONT. *
  103. 1010 TC = 0
  104. 1020  IF M(N -11) < = 0  THEN M(N -11) =  -1:F(TC) = N -11:TC = TC +1
  105. 1030  IF M(N +11) < = 0  THEN M(N +11) =  -1:F(TC) = N +11:TC = TC +1
  106. 1040  IF M(N -1) < = 0  THEN M(N -1) =  -1:F(TC) = N -1:TC = TC +1
  107. 1050  IF M(N +1) < = 0  THEN M(N +1) =  -1:F(TC) = N +1:TC = TC +1
  108. 1060  IF TC = 0  THEN  GOTO 1230
  109. 1070  REM  * CELL & WALL & ERASE *
  110. 1080 FC =  INT( RND(1) *TC)
  111. 1090  IF N -F(FC) = 11  THEN M(N) = M(N) +1:CC = N:M(N -11) = 4:N = N -11:BK = 0: GOTO 1140
  112. 1100  IF N -F(FC) =  -11  THEN M(N) = M(N) +4:CC = N:M(N +11) = 1:N = N +11:BK = 2: GOTO 1140
  113. 1110  IF N -F(FC) =  -1  THEN M(N) = M(N) +2:CC = N:M(N +1) = 8:N = N +1:BK = 1: GOTO 1140
  114. 1120  IF N -F(FC) =  +1  THEN M(N) = M(N) +8:CC = N:M(N -1) = 2:N = N -1:BK = 3: GOTO 1140
  115. 1130  REM  * ERASE WALL *
  116. 1140 RO =  INT(CC/11):CO =  INT((CC/11 - INT(CC/11)) *11 +.05) -1
  117. 1150  COLOR= 0
  118. 1160  IF BK = 0  THEN  HLIN (CO *4 -1),(CO *4 +1) AT (RO *4 -2): GOTO 1200
  119. 1170  IF BK = 1  THEN  VLIN (RO *4 -1),(RO *4 +1) AT (CO *4 +2): GOTO 1200
  120. 1180  IF BK = 2  THEN  HLIN (CO *4 -1),(CO *4 +1) AT (RO *4 +2): GOTO 1200
  121. 1190  IF BK = 3  THEN  VLIN (RO *4 -1),(RO *4 +1) AT (CO *4 -2): GOTO 1200
  122. 1200  COLOR= HU
  123. 1210  RETURN 
  124. 1220  REM  * CHECK M() FOR FRONT. *
  125. 1230 TC = 0
  126. 1240  FOR I = 13 TO 110
  127. 1250  IF M(I) =  -1  THEN F(TC) = I:TC = TC +1
  128. 1260  NEXT I
  129. 1270  IF TC = 0  THEN  POP : RETURN 
  130. 1280 FC =  INT( RND(1) *TC)
  131. 1290  IF M(F(FC) +11) >0  AND M(F(FC) +11) <16  THEN N = F(FC) +11: RETURN 
  132. 1300  IF M(F(FC) -11) >0  AND M(F(FC) -11) <16  THEN N = F(FC) -11: RETURN 
  133. 1310  IF M(F(FC) +1) >0  AND M(F(FC) +1) <16  THEN N = F(FC) +1: RETURN 
  134. 1320  IF M(F(FC) -1) >0  THEN N = F(FC) -1: RETURN 
  135. 1330  REM  * CHOOSE #1 CELL *
  136. 1340 N =  INT( RND(1) *109): IF N <13  THEN 1340
  137. 1350  IF M(N) = 100  THEN 1340
  138. 1360 M(N) = 1
  139. 1370  GOSUB 1010
  140. 1380 M(CC) = M(CC) -1
  141. 1390  RETURN 
  142. 1400  REM  * BORDERS FOR M() *
  143. 1410  FOR I = 1 TO 11:M(I) = 100: NEXT 
  144. 1420  FOR I = 12 TO 100  STEP 11:M(I) = 100:M(I +10) = 100: NEXT 
  145. 1430  FOR I = 111 TO 121:M(I) = 100: NEXT 
  146. 1440  RETURN 
  147. 1450  REM  * DRAW GRID *
  148. 1460  HOME : GR : READ HU: IF HU = 100  THEN  RESTORE : GOTO 1460
  149. 1470  COLOR= HU
  150. 1480  DATA   6,9,7,14,11,12,3,100 
  151. 1490  FOR I = 2 TO 38  STEP 4: HLIN 2,38 AT I: VLIN 2,38 AT I: NEXT : RETURN 
  152. 1500  REM  * REDRAW SAME MAZE *
  153. 1510  COLOR= 0: FOR I = 13 TO 109: IF M(I) = 100  THEN  NEXT 
  154. 1520 ER = M(I):RO =  INT(I/11):CO =  INT((I/11 - INT(I/11)) *11 +.05) -1
  155. 1530  IF ER >7  THEN ER = ER -8: VLIN (RO *4 -1),(RO *4 +1) AT (CO *4 -2)
  156. 1540  IF ER >3  THEN ER = ER -4: HLIN (CO *4 -1),(CO *4 +1) AT (RO *4 +2)
  157. 1550  IF ER >1  THEN ER = ER -2: VLIN (RO *4 -1),(RO *4 +1) AT (CO *4 +2)
  158. 1560  IF ER = 1  THEN  HLIN (CO *4 -1),(CO *4 +1) AT (RO *4 -2)
  159. 1570  NEXT I
  160. 1580  COLOR= HU: RETURN